class AplicadorDeReglasDeSufijos:
	def aplicarReglasParaToken(self, token):
		return self.aplicarReglasPara([token])

	def aplicarReglasPara(self, comentario):
		reglas = self.obtenerReglas()

		tokensConReglasAplicadas = []
        
		for token in comentario:
			reglasAplicadas = self.aplicar(reglas, token)
			for tokenConAplicacion in reglasAplicadas:
				tokensConReglasAplicadas.append((token, tokenConAplicacion))

		return tokensConReglasAplicadas

	def aplicar(self, reglas, token):
		reemplazosAplicados = []

		for regla in reglas:
			sufijo, reemplazo = regla
            
			if self.tieneSufijo(sufijo, token):
				reemplazosAplicados.append(self.reemplazar(sufijo, reemplazo, token))

		return reemplazosAplicados

	def tieneSufijo(self, sufijo, token):
		return sufijo == token[-len(sufijo):]

	def reemplazar(self, sufijo, reemplazo, token):
		return token[:-len(sufijo)] + reemplazo
		
	def obtenerReglas(self):
		raise NotImplementedError( "AplicadorDeReglasDeSufijos.obtenerReglas() no implementado" )
